supernova: fixes for boost-1.49 and gcc-4.7
[supercollider.git] / Help / UGens / Synth control / Envelopes / FreeSelfWhenDone.html
blob304d6bb910b658c36b2126f61208833e124f8f22
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2 <html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5 <meta http-equiv="Content-Style-Type" content="text/css">
6 <title></title>
7 <meta name="Generator" content="Cocoa HTML Writer">
8 <meta name="CocoaVersion" content="949.46">
9 <style type="text/css">
10 p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Helvetica}
11 p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica; min-height: 22.0px}
12 p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
13 p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
14 p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
15 p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
16 p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #bf0000}
17 p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #0000bf}
18 p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #606060}
19 span.s1 {font: 18.0px Helvetica}
20 span.s2 {color: #0000bf}
21 span.s3 {color: #0000bf}
22 span.s4 {color: #0000bf}
23 span.s5 {color: #000000}
24 span.s6 {color: #606060}
25 span.s7 {color: #007300}
26 span.Apple-tab-span {white-space:pre}
27 </style>
28 </head>
29 <body>
30 <p class="p1"><span class="s1"><b>FreeSelfWhenDone<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b></span><b>free the enclosing synth when a UGen is finished</b></p>
31 <p class="p2"><br></p>
32 <p class="p3"><b>FreeSelfWhenDone.kr(src)</b></p>
33 <p class="p4"><br></p>
34 <p class="p3">Some UGens, such as PlayBuf, RecordBuf, Line, XLine, EnvGen, Linen, BufRd, BufWr and the Buffer delay UGens set a 'done' flag when they are finished playing. FreeSelfWhenDone will free the enclosing synth when this flag is set to true. Note that many of these UGens have doneActions, which are another way of accomplishing the same thing. See <a href="UGen-doneActions.html"><span class="s2">UGen-doneActions</span></a> for more detail. <b>N.B.</b> One must be careful when using binary operations on UGens with done flags, as these will return a <a href="../../Algebraic/BinaryOpUGen.html"><span class="s3">BinaryOpUGen</span></a>, and thus prevent the done flag from being accessible. See example below.</p>
35 <p class="p4"><span class="Apple-converted-space"> </span></p>
36 <p class="p3"><b>src</b> - the UGen to check for done.</p>
37 <p class="p4"><br></p>
38 <p class="p4"><br></p>
39 <p class="p5">s.boot;</p>
40 <p class="p6"><br></p>
41 <p class="p7">// simple example</p>
42 <p class="p5">(</p>
43 <p class="p5">{ <span class="s4">var</span> env;</p>
44 <p class="p5">env = <span class="s4">Line</span>.kr(0, 1, 1);</p>
45 <p class="p7"><span class="s4">FreeSelfWhenDone</span><span class="s5">.kr(env); </span>// free synth at end of line</p>
46 <p class="p5"><span class="s4">SinOsc</span>.ar(200, 0, 0.5) * env<span class="Apple-converted-space"> </span></p>
47 <p class="p5">}.play;</p>
48 <p class="p5">)</p>
49 <p class="p6"><br></p>
50 <p class="p7">// the previous example works, because FreeSelfWhenDone operates on the Line</p>
51 <p class="p7">// this version won't work</p>
52 <p class="p5">(</p>
53 <p class="p5">{ <span class="s4">var</span> env, output;</p>
54 <p class="p5">env = <span class="s4">Line</span>.kr(0, 1, 1);</p>
55 <p class="p5">output = <span class="s4">SinOsc</span>.ar(200, 0, 0.5) * env;</p>
56 <p class="p7"><span class="s5">output.postln; </span>// output is a BinaryOpUGen, which has no 'done' flag</p>
57 <p class="p7"><span class="s4">FreeSelfWhenDone</span><span class="s5">.kr(output); </span>// won't ever be done</p>
58 <p class="p5">output</p>
59 <p class="p5">}.play;</p>
60 <p class="p5">)</p>
61 <p class="p6"><br></p>
62 <p class="p7">// record for four seconds</p>
63 <p class="p5">b = <span class="s4">Buffer</span>.alloc(s, 44100 * 4.0, 1);</p>
64 <p class="p5">(</p>
65 <p class="p5"><span class="s4">SynthDef</span>(<span class="s6">"help-RecordBuf"</span>,{ <span class="s4">arg</span> out=0,bufnum=0;</p>
66 <p class="p5"><span class="Apple-tab-span"> </span><span class="s4">var</span> formant, recbuf;</p>
67 <p class="p5"><span class="Apple-tab-span"> </span>formant = <span class="s4">Formant</span>.ar(<span class="s4">XLine</span>.kr(400,1000, 4), 2000, 800, 0.125);</p>
68 <p class="p5"><span class="Apple-tab-span"> </span>recbuf = <span class="s4">RecordBuf</span>.ar(formant, bufnum, recLevel: <span class="s4">Line</span>.kr(1, 1), loop: 0);</p>
69 <p class="p7"><span class="s5"><span class="Apple-tab-span"> </span></span>// The RecordBuf doesn't loop, so you can check it for 'done' status</p>
70 <p class="p8"><span class="s5"><span class="Apple-tab-span"> </span></span>FreeSelfWhenDone<span class="s5">.kr(recbuf);</span></p>
71 <p class="p5">}).play(s,[<span class="s7">\out</span>, 0, <span class="s7">\bufnum</span>, b]);</p>
72 <p class="p5">)</p>
73 <p class="p6"><br></p>
74 <p class="p7">// play it back</p>
75 <p class="p5">(</p>
76 <p class="p9"><span class="s4">SynthDef</span><span class="s5">(</span>"help-RecordBuf play"<span class="s5">,{ </span><span class="s4">arg</span><span class="s5"> out=0,bufnum=0;</span></p>
77 <p class="p5"><span class="Apple-tab-span"> </span><span class="s4">var</span> playbuf;</p>
78 <p class="p5"><span class="Apple-tab-span"> </span>playbuf = <span class="s4">PlayBuf</span>.ar(1,bufnum);</p>
79 <p class="p7"><span class="s5"><span class="Apple-tab-span"> </span></span><span class="s4">FreeSelfWhenDone</span><span class="s5">.kr(playbuf); </span>// frees the synth when the PlayBuf is finished</p>
80 <p class="p5"><span class="Apple-tab-span"> </span><span class="s4">Out</span>.ar(out, playbuf);</p>
81 <p class="p5">}).play(s,[<span class="s7">\out</span>, 0, <span class="s7">\bufnum</span>, b]);</p>
82 <p class="p5">)</p>
83 </body>
84 </html>